經過三十天的努力,我們從零基礎開始,逐步了解了 Machine Learning 的全貌,並初步接觸了 Deep Learning。
在這個系列裏面,我們一開始學習了AI的基礎觀念,我們知道AI是一個很大的概念,任何有像人的行爲一樣的應用都可以稱作AI應用,而機器學習是AI的一個子領域,深度學習則是機器學習的其中一種方法;我們還知道了機器學習其實就三個步驟:定義一組Function Set,設計一個Loss Function(Objective Function),然後去做Optimization。我們知道我們可以根據不同的任務
,使用不同的方法
,根據我們現有的資料來實現不同的學習情境
。
任務
可能是Regression
、Classification
或是Structured Learning
;Linear Model
、Logistic Regression
、Decision Trees
、Support Vector Machines
、Deep Learning
等;Supervised Learning
,反之我們可能考慮Unsupervised Learning
、Semi-supervised Learning
、Transfer Learning
或是Reinforcement Learning
等。我們還學習了Linear Regression、Logistic Regression、Multilayer perceptron(MLP)、Convolutional Neural Networks(CNN)、Transformer等Model。
爲了找到不同的Model的可接受範圍内
的參數,我們需要使用不同的Loss Function,以及不同的Optimization的策略來達成我們的目標。比如說一個Linear Model我們可能就會使用MAE、MSE等作爲Loss Function,如果是對於兩個機率分佈之間的比較,可能就會使用最大似然估計、KL散度、Cross-Entropy等,并且可能還會對Loss Function做一下Regularization,如L1、L2等來防止模型Overfitting。
然後我們可能在訓練的過程中,發現對於每個Feature的數值變化,有的會比較敏感,有的比較不敏感,因此我們可能會再考慮將我們的資料去做Normalization,如Z-Score Standardization、Min-Max Normalization等。
接下來我們可能還會再Training的過程中遇到Critical Points如Saddle Point、Local Minima,因此我們會用除了Vanilla Gradient Decent之外的算法,可能是SGD、Momentum、Root Mean Square、RMSProps、Learning Rate Scheduling等不同的招數打出來的組合拳(AdaGrad、Adam……)去幫助我們找到一個可接受的Loss。
而當我們在訓練集上的表現很好,但是測試集的表現很差的時候,我們就會說這個是Overfitting,那麽我們就可能通過一些手段如Early Stopping、Regularization或是Dropout之類的來解決這樣的問題。
再來當我們遇到綫性問題解決不了的時候,我們的解決辦法可能是將原本的Feature所在的空間映射到另外一個空間,又或者會使用非線性的激活函數如Sigmoid、tanh、ReLu、Softmax等來解決這個問題;當我們認爲要對問題做特徵工程是一件很複雜的事情的時候,我們可能會考慮用深度學習來解決該問題,這樣就可以把問題轉換成另外一個問題,也就是從[特徵工程
]轉變成[網路架構設計
]的問題。
總結來説,我們雖然學習的東西不多,但是都學的十分的扎實,對我自己而言,我不會因爲鐵人賽結束就停止學習,相反我認爲自己學習的東西還太少,太淺,因此我也會不斷地勉勵自己,哪怕在鐵人賽結束後也持續分享我對於機器學習的學習歷程。
當初報名參加這次挑戰時,我內心充滿掙扎。畢竟去年已經參加過一次鐵人賽,我深知要連續30天撰寫有價值的內容是一件艱難的事。我本可以選擇隨便寫些敷衍的文章,但那麼做的意義在哪裡呢?
報名之初,我的目標就已經非常明確——我至少要理解 Machine Learning 的核心概念。當時,我正準備進入研究所鑽研學問,且已決定將來會專攻機器學習相關的研究。因此,我需要在學期開始前弄懂機器學習的基本原理,以便在接下來的學習中打好基礎,為進一步研究做好準備。
然而,學習的過程並非一帆風順,甚至可以說充滿挑戰。作為一個畢業一年的職場新人,我的重心一直在工作上,很多大學時期的數學知識早已忘得一乾二淨。除了每天開發時會用到的演算法和資料結構外,其他內容對我來說都非常陌生。因此,學習機器學習的第一步就是重拾線性代數,因為我們接觸的第一個模型就是線性迴歸(Linear Regression)。隨著學習的深入,我發現為了讓機器找到最佳的參數 (w) 和 (b),需要用到梯度下降法,這又迫使我回去複習微積分。接著,當學到邏輯迴歸的時候,機率與統計的知識又變得不可或缺,我不得不再去理解各種機率分佈、交叉熵與 KL 散度等概念。這些過程中的重重挑戰讓我一度懷疑自己是否適合繼續朝機器學習領域發展。
回顧這次鐵人賽的30天,每篇文章的背後都凝聚著大量的學習與努力。我看了無數次的教學影片和資料,理解之後才敢將內容分享出來。比如台大教授李宏毅的課程影片,我會交替觀看2017、2019、2021 和 2022 年的版本,每篇文章涉及的影片我至少重複觀看了六到七次,直到完全理解後才敢動筆。儘管如此,我對自己的文筆還是不太自信,所以每次寫完文章,我都會讓 AI 幫助我進行潤色和審稿。
最後,我想說的是,在這個資訊爆炸的時代,在這個AI已經降臨的時代,我們如何保持自己的競爭力?當我們希望機器能像人一樣學習,甚至超越人類時,我們是否也應該反過來要求自己,像訓練機器一樣不斷學習,像機器[學會]學習一樣,我們人是不是也能夠反過來,通過比較有效率的學習方式不斷吸收新知識,這樣才能確保自己不會落伍?